$(function() {
	var app = angular.module('calApp', [ 'toaster', 'ngAnimate' ]);
	app.controller('calCtrl', function($scope, $http, $filter, toaster) {
		$scope.eventAddClick = function() {
			var title = $('#event_title').val();
			addEvent(title);
		}
	})
	init();
})
// 添加日程
function addEvent(title) {
	title = title.length == 0 ? "Untitled Event" : title;
	var html = $('<div class="external-event label">' + title + '</div>');
	jQuery('#event_box').append(html);
	initDrag(html);
}
// 初始化拖拽
function initDrag(el) {
	// create an Event Object
	// (http://arshaw.com/fullcalendar/docs/event_data/Event_Object/)
	// it doesn't need to have a start or end
	var eventObject = {
		title : $.trim(el.text())
	// use the element's text as the event title
	};
	// store the Event Object in the DOM element so we can get to it
	// later
	el.data('eventObject', eventObject);
	// make the event draggable using jQuery UI
	el.draggable({
		zIndex : 999,
		revert : true, // will cause the event to go back to its
		revertDuration : 0
	// original position after the drag
	});
}
// 初始化
function init() {
	/*
	 * App.addResponsiveHandler(function() { Calendar.initCalendar(); });
	 */
	$('.page-sidebar .sidebar-toggler').click(function() {
		initCalendar();
	});
	initCalendar();
}
// 初始化日历
function initCalendar() {
	if (!jQuery().fullCalendar) {
		return;
	}
	var date = new Date();
	var d = date.getDate();
	var m = date.getMonth();
	var y = date.getFullYear();
	var h = {};
	if (App.isRTL()) {
		if ($('#calendar').parents(".portlet").width() <= 720) {
			$('#calendar').addClass("mobile");
			h = {
				right : 'title, prev, next',
				center : '',
				right : 'agendaDay, agendaWeek, month, today'
			};
		} else {
			$('#calendar').removeClass("mobile");
			h = {
				right : 'title',
				center : '',
				left : 'agendaDay, agendaWeek, month, today, prev,next'
			};
		}
	} else {
		if ($('#calendar').parents(".portlet").width() <= 720) {
			$('#calendar').addClass("mobile");
			h = {
				left : 'title, prev, next',
				center : '',
				right : 'today,month,agendaWeek,agendaDay'
			};
		} else {
			$('#calendar').removeClass("mobile");
			h = {
				left : 'title',
				center : '',
				right : 'prev,next,today,month,agendaWeek,agendaDay'
			};
		}
	}

	$('#external-events div.external-event').each(function() {
		initDrag($(this))
	});
	// predefined events
	$('#event_box').html("");
	$('#calendar').fullCalendar('destroy'); // destroy the calendar
	$("#calendar").fullCalendar(
			{
				weekends : true,
				firstDay : 1,
				weekMode : 'liquid',
				weekNumbers : true,
				monthNames : [ '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月',
						'九月', '十月', '十一月', '十二月' ],
				monthNamesShort : [ '一月', '二月', '三月', '四月', '五月', '六月', '七月',
						'八月', '九月', '十月', '十一月', '十二月' ],
				dayNames : [ '周日', '周一', '周二', '周三', '周四', '周五', '周六' ],
				dayNamesShort : [ '周日', '周一', '周二', '周三', '周四', '周五', '周六' ],
				weekNumberTitle : "周",
				selectable : true,
				// 控制是否显示月、周、日
				header : h,
				slotMinutes : 15,
				editable : true,
				droppable : true, // this allows things to be dropped
				// onto the calendar !!!
				drop : function(date, allDay) { // this function is
					// called when something
					// is dropped

					// retrieve the dropped element's stored Event
					// Object
					var originalEventObject = $(this).data('eventObject');
					// we need to copy it, so that multiple events don't
					// have a reference to the same object
					var copiedEventObject = $.extend({}, originalEventObject);

					// assign it the date that was reported
					copiedEventObject.start = date;
					copiedEventObject.allDay = allDay;
					copiedEventObject.className = $(this).attr("data-class");

					// render the event on the calendar
					// the last `true` argument determines if the event
					// "sticks"
					// (http://arshaw.com/fullcalendar/docs/event_rendering/renderEvent/)
					$('#calendar').fullCalendar('renderEvent',
							copiedEventObject, true);

					// is the "remove after drop" checkbox checked?
					if ($('#drop-remove').is(':checked')) {
						// if so, remove the element from the "Draggable
						// Events" list
						$(this).remove();
					}
				},
				events : [ {
					title : 'All Day Event',
					start : new Date(y, m, 1),
					backgroundColor : App.getLayoutColorCode('yellow')
				}, {
					title : 'Long Event',
					start : new Date(y, m, d - 5),
					end : new Date(y, m, d - 2),
					backgroundColor : App.getLayoutColorCode('green')
				}, {
					title : 'Repeating Event',
					start : new Date(y, m, d - 3, 16, 0),
					allDay : false,
					backgroundColor : App.getLayoutColorCode('red')
				}, {
					title : 'Repeating Event',
					start : new Date(y, m, d + 4, 16, 0),
					allDay : false,
					backgroundColor : App.getLayoutColorCode('green')
				}, {
					title : 'Meeting',
					start : new Date(y, m, d, 10, 30),
					allDay : false,
				}, {
					title : 'Lunch',
					start : new Date(y, m, d, 12, 0),
					end : new Date(y, m, d, 14, 0),
					backgroundColor : App.getLayoutColorCode('grey'),
					allDay : false,
				}, {
					title : 'Birthday Party',
					start : new Date(y, m, d + 1, 19, 0),
					end : new Date(y, m, d + 1, 22, 30),
					backgroundColor : App.getLayoutColorCode('purple'),
					allDay : false,
				}, {
					title : 'Click for Google',
					start : new Date(y, m, 28),
					end : new Date(y, m, 29),
					backgroundColor : App.getLayoutColorCode('yellow'),
					url : 'http://google.com/',
				} ]
			});
}